音视频系列六 Linux 编译ffmpeg链接openssl

您所在的位置:网站首页 openssl 静态链接 音视频系列六 Linux 编译ffmpeg链接openssl

音视频系列六 Linux 编译ffmpeg链接openssl

2023-11-24 19:51| 来源: 网络整理| 查看: 265

编译openssl

去官网(或者github)下载openssl,解压。 进入解压后的openssl根目录,创建一个build_android_openssl.sh文件,粘贴以下代码

#!/bin/bash export ANDROID_NDK_HOME=/PublicData/LinuxAndroidSdk/ndk/21.3.6528147 # 修改自己本地的ndk路径 build() { API=29 CPU=$1 PLATFORM=$2 make clean rm -rf $(pwd)/android/$CPU PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_HOME/toolchains/$PLATFORM-4.9/prebuilt/linux-x86_64/bin:$PATH ./Configure android-$CPU -D__ANDROID_API__=$API no-shared no-ssl2 no-ssl3 no-comp no-hw no-engine --prefix=$(pwd)/android/$CPU --openssldir=$(pwd)/android/$CPU make make install } # build armv7 build arm arm-linux-androideabi # build armv8 build arm64 aarch64-linux-android

根据自己需求,参考openssl根目录下的NOTES.ANDROID文件进行微调。给执行权限然后运行。等待编译完成。需要注意的是ndk版本和API一定要跟编译ffmpeg的相同。不然后面很大概率会出现openssl not found.

编译ffmpeg

在原先的编译基础上增加下面两个配置打开openssl开关

--enable-openssl \ --enable-nonfree \

同时在extra-cflags和extra-cflags中指定上面编译好后的openssl的头文件位置和库位置,如下

--extra-cflags="-I/PublicData/openssl/openssl_1_1_1l/android/$ARCH/include -fPIE -pie -Os -fpic $OPTIMIZE_CFLAGS" \ --extra-ldflags="-L/PublicData/openssl/openssl_1_1_1l/android/$ARCH/lib $ADDI_LDFLAGS" \

完整的编译脚本示例如下

#!/bin/bash NDK=/PublicData/LinuxAndroidSdk/ndk/21.3.6528147 TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 SYSROOT="$TOOLCHAIN/sysroot" API=29 function build_android { echo "Compiling FFmpeg for $CPU" CC="$TOOL_PREFIX$API-clang" CXX="$TOOL_PREFIX$API-clang++" PREFIX="${PWD}/android/$OUTPUT_FOLDER" rm -rf $PREFIX make clean ./configure \ --prefix=$PREFIX \ --libdir=$LIB_DIR \ --enable-shared \ --enable-jni \ --enable-gpl \ --enable-openssl \ --enable-nonfree \ --disable-doc \ --disable-static \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-symver \ --disable-programs \ --target-os=android \ --arch=$ARCH \ --cpu=$CPU \ --cc=$CC \ --cxx=$CXX \ --enable-cross-compile \ --cross-prefix=$CROSS_PREFIX \ --sysroot=$SYSROOT \ --disable-asm \ --disable-x86asm \ --extra-cflags="-I/PublicData/openssl/openssl_1_1_1l/android/$ARCH/include -fPIE -pie -Os -fpic $OPTIMIZE_CFLAGS" \ --extra-ldflags="-L/PublicData/openssl/openssl_1_1_1l/android/$ARCH/lib $ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make -j10 make install echo "The Compilation of FFmpeg for $CPU is completed" } # armv8-a OUTPUT_FOLDER="arm64-v8a" ARCH=arm64 CPU="armv8-a" TOOL_PREFIX="$TOOLCHAIN/bin/aarch64-linux-android" CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android- LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER" OPTIMIZE_CFLAGS="-march=$CPU" build_android # # armv7-a OUTPUT_FOLDER="armeabi-v7a" ARCH=arm CPU="armv7-a" TOOL_PREFIX="$TOOLCHAIN/bin/armv7a-linux-androideabi" CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi- LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER" OPTIMIZE_CFLAGS="-march=$CPU" build_android

可以先注释掉make和make install,只运行configure看看配置有没有什么问题。 如果出现openssl not found,然后确认前面的配置没有问题,那就打开ffmpeg根目录下的configure文件,搜索下openssl not found,然后参考下最新版本的ffmpeg,看看两者有什么不同,看情况修改。我的配置如下

... enabled openssl && { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl || check_pkg_config openssl openssl openssl/ssl.h SSL_library_init || check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto || check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto || check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 || check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 || die "ERROR: openssl not found"; } ...

我是在原先的配置上多加了

check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||

这一行,是新版本的openssl改变导致的。 其他问题自行百度,以此类推。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3